From 8be8d7f61dd77ae9331c92ec692350e7947c6340 Mon Sep 17 00:00:00 2001 From: Soeren Sandmann Date: Sun, 21 Sep 2003 21:17:44 +0000 Subject: [PATCH] Add new "tab moves focus" property (#122709) Sun Sep 21 23:13:37 2003 Soeren Sandmann * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709) --- ChangeLog | 4 +++ ChangeLog.pre-2-10 | 4 +++ ChangeLog.pre-2-4 | 4 +++ ChangeLog.pre-2-6 | 4 +++ ChangeLog.pre-2-8 | 4 +++ gtk/gtktextview.c | 70 +++++++++++++++++++++++++++++++++++++++++++--- gtk/gtktextview.h | 10 +++++-- 7 files changed, 93 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index cf31739478..5e58a8ce08 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sun Sep 21 23:13:37 2003 Soeren Sandmann + + * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709) + 2003-09-20 Tor Lillqvist * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index cf31739478..5e58a8ce08 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,7 @@ +Sun Sep 21 23:13:37 2003 Soeren Sandmann + + * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709) + 2003-09-20 Tor Lillqvist * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index cf31739478..5e58a8ce08 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,7 @@ +Sun Sep 21 23:13:37 2003 Soeren Sandmann + + * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709) + 2003-09-20 Tor Lillqvist * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index cf31739478..5e58a8ce08 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,7 @@ +Sun Sep 21 23:13:37 2003 Soeren Sandmann + + * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709) + 2003-09-20 Tor Lillqvist * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index cf31739478..5e58a8ce08 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,7 @@ +Sun Sep 21 23:13:37 2003 Soeren Sandmann + + * gtk/gtktextview.[ch]: Add new "tab moves focus" property (#122709) + 2003-09-20 Tor Lillqvist * gtk-zip.sh.in: Don't use zip -r on the etc directory, to avoid diff --git a/gtk/gtktextview.c b/gtk/gtktextview.c index c79c136a65..b82dec7906 100644 --- a/gtk/gtktextview.c +++ b/gtk/gtktextview.c @@ -140,6 +140,7 @@ enum PROP_CURSOR_VISIBLE, PROP_BUFFER, PROP_OVERWRITE, + PROP_TAB_MOVES_FOCUS, LAST_PROP }; @@ -666,7 +667,14 @@ gtk_text_view_class_init (GtkTextViewClass *klass) FALSE, G_PARAM_READWRITE)); - + g_object_class_install_property (gobject_class, + PROP_TAB_MOVES_FOCUS, + g_param_spec_boolean ("tab_moves_focus", + _("Tab moves focus"), + _("Whether tab moves focus"), + FALSE, + G_PARAM_READWRITE)); + /* * Signals */ @@ -2592,6 +2600,10 @@ gtk_text_view_set_property (GObject *object, gtk_text_view_set_buffer (text_view, GTK_TEXT_BUFFER (g_value_get_object (value))); break; + case PROP_TAB_MOVES_FOCUS: + gtk_text_view_set_tab_moves_focus (text_view, g_value_get_boolean (value)); + break; + default: g_assert_not_reached (); break; @@ -2661,6 +2673,10 @@ gtk_text_view_get_property (GObject *object, case PROP_OVERWRITE: g_value_set_boolean (value, text_view->overwrite_mode); break; + + case PROP_TAB_MOVES_FOCUS: + g_value_set_boolean (value, text_view->tab_moves_focus); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -3795,10 +3811,10 @@ gtk_text_view_key_press_event (GtkWidget *widget, GdkEventKey *event) event->keyval == GDK_KP_Tab) && !(event->state & GDK_CONTROL_MASK)) { - /* If the text widget isn't editable overall, move the focus - * instead + /* If the text widget isn't editable overall, or if the application + * has turned on "tab_moves_focus", move the focus instead */ - if (text_view->editable) + if (!text_view->tab_moves_focus && text_view->editable) { gtk_text_view_commit_text (text_view, "\t"); obscure = TRUE; @@ -5169,6 +5185,52 @@ gtk_text_view_set_overwrite (GtkTextView *text_view, } } +/** + * gtk_text_view_set_tab_moves_focus: + * @text_view: A #GtkTextView + * @tab_moves_focus: %TRUE if pressing the Tab should move the keyboard focus, %FALSE, if pressing the Tab key should insert a Tab character. + * + * Sets the behavior of the text widget when the Tab key is pressed. If @tab_moves_focus + * is %TRUE the keyboard focus is moved to the next widget in the focus chain. If + * @tab_moves_focus is %FALSE a tab character is inserted. + * + * Since: 2.4 + **/ +void +gtk_text_view_set_tab_moves_focus (GtkTextView *text_view, + gboolean tab_moves_focus) +{ + g_return_if_fail (GTK_IS_TEXT_VIEW (text_view)); + + tab_moves_focus = tab_moves_focus != FALSE; + + if (text_view->tab_moves_focus != tab_moves_focus) + { + text_view->tab_moves_focus = tab_moves_focus; + + g_object_notify (G_OBJECT (text_view), "tab_moves_focus"); + } +} + +/** + * gtk_text_view_get_tab_moves_focus: + * @text_view: A #GtkTextView + * + * Returns whether pressing the Tab key moves the keyboard focus. See + * gtk_text_view_set_tab_moves_focus(). + * + * Return value: %TRUE if pressing the Tab key moves the keyboard focus. + * + * Since: 2.4 + **/ +gboolean +gtk_text_view_get_tab_moves_focus (GtkTextView *text_view) +{ + g_return_val_if_fail (GTK_IS_TEXT_VIEW (text_view), FALSE); + + return text_view->tab_moves_focus; +} + static void gtk_text_view_move_focus (GtkTextView *text_view, GtkDirectionType direction_type) diff --git a/gtk/gtktextview.h b/gtk/gtktextview.h index fb65590706..c82ea1de98 100644 --- a/gtk/gtktextview.h +++ b/gtk/gtktextview.h @@ -93,9 +93,10 @@ struct _GtkTextView /* if we have reset the IM since the last character entered */ guint need_im_reset : 1; - /* these flags are no longer used */ - guint reserved1 : 1; - guint reserved2 : 1; + guint tab_moves_focus : 1; + + /* this flag is no longer used */ + guint reserved : 1; /* debug flag - means that we've validated onscreen since the * last "invalidate" signal from the layout @@ -326,6 +327,9 @@ gboolean gtk_text_view_get_editable (GtkTextView *text_vi void gtk_text_view_set_overwrite (GtkTextView *text_view, gboolean overwrite); gboolean gtk_text_view_get_overwrite (GtkTextView *text_view); +void gtk_text_view_set_tab_moves_focus (GtkTextView *text_view, + gboolean tab_moves_focus); +gboolean gtk_text_view_get_tab_moves_focus (GtkTextView *text_view); void gtk_text_view_set_pixels_above_lines (GtkTextView *text_view, gint pixels_above_lines); gint gtk_text_view_get_pixels_above_lines (GtkTextView *text_view); -- 2.30.2